all files / fc-er/ View.js

61.33% Statements 46/75
37.74% Branches 20/53
73.68% Functions 14/19
59.09% Lines 26/44
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105     317522×   41058×                   12262×   12262×   12262× 12262×                         23099×                                                                   12262×   12262×         12262×   12262×               10830× 10830×              
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; Eif ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Eif (protoProps) defineProperties(Constructor.prototype, protoProps); Iif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
 
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
function _possibleConstructorReturn(self, call) { Iif (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
 
function _inherits(subClass, superClass) { Iif (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
 
Iif (typeof define !== 'function') {
    var define = require('amdefine')(module);
}
 
define(function (require) {
    'use strict';
 
    var util = require('./util');
    var EventTarget = require('fc-mini-event/EventTarget');
 
    var View = function (_EventTarget) {
        _inherits(View, _EventTarget);
 
        function View() {
            _classCallCheck(this, View);
 
            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(View).call(this));
 
            _this.initialize();
            return _this;
        }
 
        _createClass(View, [{
            key: 'initialize',
            value: function initialize() {}
        }, {
            key: 'getTemplateName',
            value: function getTemplateName() {
                return this.template || '';
            }
        }, {
            key: 'getContainerElement',
            value: function getContainerElement() {
                return util.getElement(this.container) || null;
            }
        }, {
            key: 'getTemplateData',
            value: function getTemplateData() {
                var model = this.model;
                if (model && typeof model.get !== 'function') {
                    var Model = require('./Model');
                    model = new Model({ args: model });
                }
 
                var visit = function visit(propertyPath) {
                    var path = propertyPath.replace(/\[(\d+)\]/g, '.$1').split('.');
                    var propertyName = path.shift();
                    var value = model.get(propertyName);
 
                    while (value && (propertyName = path.shift())) {
                        value = value[propertyName];
                    }
 
                    return value;
                };
 
                return { get: visit, relatedModel: model };
            }
        }, {
            key: 'renderToString',
            value: function renderToString() {
                var template = require('etpl');
                return template.render(this.getTemplateName(), this.getTemplateData());
            }
        }, {
            key: 'render',
            value: function render() {
                var container = this.getContainerElement();
                // 容器没有还不一定是没配置好,很可能是主Action销毁了子Action才刚加载完
                Iif (!container) {
                    var url = this.model && typeof this.model.get === 'function' && this.model.get('url');
                    throw new Error('Container not found when rendering ' + (url ? '"' + url + '"' : 'view'));
                }
 
                container.innerHTML = this.renderToString();
 
                this.enterDocument();
            }
        }, {
            key: 'enterDocument',
            value: function enterDocument() {}
        }, {
            key: 'dispose',
            value: function dispose() {
                var container = this.getContainerElement();
                container && (container.innerHTML = '');
            }
        }]);
 
        return View;
    }(EventTarget);
 
    return View;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9WaWV3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFJLE9BQU8sTUFBUCxLQUFrQixVQUFsQixFQUE4QjtBQUFDLFFBQUksU0FBUyxRQUFRLFVBQVIsRUFBb0IsTUFBcEIsQ0FBVCxDQUFMO0NBQWxDOztBQUVBLE9BQU8sVUFBVSxPQUFWLEVBQW1CO0FBQ3RCLGlCQURzQjs7QUFHdEIsUUFBTSxPQUFPLFFBQVEsUUFBUixDQUFQLENBSGdCO0FBSXRCLFFBQU0sY0FBYyxRQUFRLDJCQUFSLENBQWQsQ0FKZ0I7O1FBTWhCOzs7QUFDRix3QkFBYzs7Ozs7QUFFVixrQkFBSyxVQUFMLEdBRlU7O1NBQWQ7Ozs7eUNBS2E7Ozs4Q0FFSztBQUNkLHVCQUFPLEtBQUssUUFBTCxJQUFpQixFQUFqQixDQURPOzs7O2tEQUlJO0FBQ2xCLHVCQUFPLEtBQUssVUFBTCxDQUFnQixLQUFLLFNBQUwsQ0FBaEIsSUFBbUMsSUFBbkMsQ0FEVzs7Ozs4Q0FJSjtBQUNkLG9CQUFJLFFBQVEsS0FBSyxLQUFMLENBREU7QUFFZCxvQkFBSSxTQUFTLE9BQU8sTUFBTSxHQUFOLEtBQWMsVUFBckIsRUFBaUM7QUFDMUMsd0JBQU0sUUFBUSxRQUFRLFNBQVIsQ0FBUixDQURvQztBQUUxQyw0QkFBUSxJQUFJLEtBQUosQ0FBVSxFQUFDLE1BQU0sS0FBTixFQUFYLENBQVIsQ0FGMEM7aUJBQTlDOztBQUtBLG9CQUFNLFFBQVEsU0FBUixLQUFRLENBQUMsWUFBRCxFQUFrQjtBQUM1Qix3QkFBTSxPQUFPLGFBQWEsT0FBYixDQUFxQixZQUFyQixFQUFtQyxLQUFuQyxFQUEwQyxLQUExQyxDQUFnRCxHQUFoRCxDQUFQLENBRHNCO0FBRTVCLHdCQUFJLGVBQWUsS0FBSyxLQUFMLEVBQWYsQ0FGd0I7QUFHNUIsd0JBQUksUUFBUSxNQUFNLEdBQU4sQ0FBVSxZQUFWLENBQVIsQ0FId0I7O0FBSzVCLDJCQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUwsRUFBZixDQUFWLEVBQXdDO0FBQzNDLGdDQUFRLE1BQU0sWUFBTixDQUFSLENBRDJDO3FCQUEvQzs7QUFJQSwyQkFBTyxLQUFQLENBVDRCO2lCQUFsQixDQVBBOztBQW1CZCx1QkFBTyxFQUFDLEtBQUssS0FBTCxFQUFZLGNBQWMsS0FBZCxFQUFwQixDQW5CYzs7Ozs2Q0FzQkQ7QUFDYixvQkFBTSxXQUFXLFFBQVEsTUFBUixDQUFYLENBRE87QUFFYix1QkFBTyxTQUFTLE1BQVQsQ0FBZ0IsS0FBSyxlQUFMLEVBQWhCLEVBQXdDLEtBQUssZUFBTCxFQUF4QyxDQUFQLENBRmE7Ozs7cUNBS1I7QUFDTCxvQkFBTSxZQUFZLEtBQUssbUJBQUwsRUFBWjs7QUFERCxvQkFHRCxDQUFDLFNBQUQsRUFBWTtBQUNaLHdCQUFJLE1BQU0sS0FBSyxLQUFMLElBQWMsT0FBTyxLQUFLLEtBQUwsQ0FBVyxHQUFYLEtBQW1CLFVBQTFCLElBQXdDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxLQUFmLENBQXRELENBREU7QUFFWiwwQkFBTSxJQUFJLEtBQUosQ0FBVSx5Q0FBeUMsTUFBTSxNQUFNLEdBQU4sR0FBWSxHQUFaLEdBQWtCLE1BQXhCLENBQXpDLENBQWhCLENBRlk7aUJBQWhCOztBQUtBLDBCQUFVLFNBQVYsR0FBc0IsS0FBSyxjQUFMLEVBQXRCLENBUks7O0FBVUwscUJBQUssYUFBTCxHQVZLOzs7OzRDQWFPOzs7c0NBRU47QUFDTixvQkFBTSxZQUFZLEtBQUssbUJBQUwsRUFBWixDQURBO0FBRU4sOEJBQWMsVUFBVSxTQUFWLEdBQXNCLEVBQXRCLENBQWQsQ0FGTTs7Ozs7TUExREssYUFORzs7QUFzRXRCLFdBQU8sSUFBUCxDQXRFc0I7Q0FBbkIsQ0FBUCIsImZpbGUiOiJWaWV3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHt2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUpfVxuXG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG4gICAgY29uc3QgRXZlbnRUYXJnZXQgPSByZXF1aXJlKCdmYy1taW5pLWV2ZW50L0V2ZW50VGFyZ2V0Jyk7XG5cbiAgICBjbGFzcyBWaWV3IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluaXRpYWxpemUoKSB7fVxuXG4gICAgICAgIGdldFRlbXBsYXRlTmFtZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0Q29udGFpbmVyRWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmdldEVsZW1lbnQodGhpcy5jb250YWluZXIpIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRUZW1wbGF0ZURhdGEoKSB7XG4gICAgICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgaWYgKG1vZGVsICYmIHR5cGVvZiBtb2RlbC5nZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBNb2RlbCA9IHJlcXVpcmUoJy4vTW9kZWwnKTtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IG5ldyBNb2RlbCh7YXJnczogbW9kZWx9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmlzaXQgPSAocHJvcGVydHlQYXRoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHByb3BlcnR5UGF0aC5yZXBsYWNlKC9cXFsoXFxkKylcXF0vZywgJy4kMScpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IHBhdGguc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtb2RlbC5nZXQocHJvcGVydHlOYW1lKTtcblxuICAgICAgICAgICAgICAgIHdoaWxlICh2YWx1ZSAmJiAocHJvcGVydHlOYW1lID0gcGF0aC5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtnZXQ6IHZpc2l0LCByZWxhdGVkTW9kZWw6IG1vZGVsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRvU3RyaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSByZXF1aXJlKCdldHBsJyk7XG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUucmVuZGVyKHRoaXMuZ2V0VGVtcGxhdGVOYW1lKCksIHRoaXMuZ2V0VGVtcGxhdGVEYXRhKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgICAgICAvLyDlrrnlmajmsqHmnInov5jkuI3kuIDlrprmmK/msqHphY3nva7lpb3vvIzlvojlj6/og73mmK/kuLtBY3Rpb27plIDmr4HkuoblrZBBY3Rpb27miY3liJrliqDovb3lroxcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMubW9kZWwgJiYgdHlwZW9mIHRoaXMubW9kZWwuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHRoaXMubW9kZWwuZ2V0KCd1cmwnKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRhaW5lciBub3QgZm91bmQgd2hlbiByZW5kZXJpbmcgJyArICh1cmwgPyAnXCInICsgdXJsICsgJ1wiJyA6ICd2aWV3JykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJUb1N0cmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLmVudGVyRG9jdW1lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyRG9jdW1lbnQoKSB7fVxuXG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnRhaW5lciAmJiAoY29udGFpbmVyLmlubmVySFRNTCA9ICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBWaWV3O1xufSk7XG4iXX0=